package com.cloud.system.api.service;

import java.util.List;
import java.util.Map;

import com.cloud.system.api.bean.*;
import com.cloud.system.api.entity.*;
import com.cloud.system.common.result.QkTreeNode;
import com.cloud.system.common.result.SelectItem;
import com.cloud.system.common.utils.Pager;
import com.github.pagehelper.PageInfo;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

public interface UnitInfoService {
	/**
	 * 获取组织机构树
	 * @param unitId
	 * @param isRoot
	 * @param isSupervise
     * @return
	 */
	public List<QkTreeNode> listUnitTree(long unitId, boolean isRoot, String isSupervise,boolean isScreen);
	
	/**
	 * 加载机构信息
	 * @param unitId
	 * @return
	 */
	public UnitInfo load(long unitId);

	/**
	 * 刪除机构信息
	 * @param unitId
	 * @return
	 */
	public long delete(long unitId);

	/**
	 * 保存或更新机构信息
	 * @param info
	 * @return
	 */
	public Map<String,UnitInfo> saveUpdate(UnitInfo info);

	/**
	 * 根据关键字查找机构信息
	 * @param name
	 * @return
	 */
	public List<UnitInfo> search(String name);

	/**
	 * 加载上级执法主体信息
	 * @param unit
	 * @return
	 */
	public List<SelectItem> loadSeniorSubject(UnitInfo unit);

	/**
	 * 装载待导入机构数据
	 * @param units
	 * @return
	 */
	public Map<String, List<UnitImportBean>> analyseImportFile(List<UnitImportBean> units);

	/**
	 * 装载待导入职权数据
	 * @return
	 */
	public Map<String, List<PowerImportBean>> powerImportFile(List<PowerImportBean> unitPowers);

	/**
	 * 装载下级机关
	 * @param unitId
	 * @return
	 */
	public List<UnitInfo> loadChildren(Long unitId);

	/**
	 * 组织机构重排序
	 * @param unitInfo
	 * @return
	 */
	public int reorderUnit(List<UnitInfo> unitInfo);
	
	/**
	 * 组织机构导入
	 * @param unitId
	 * @param units
	 * @return
	 */
	public long importUnits(Long unitId, List<UnitInfo> units);

	/**
	 * 职权导入
	 * @param unitId
	 * @param unitName
	 * @return
	 */
	public long importPower(Long unitId, String unitName, List<PowerImportBean> unitPowers);
	/**
	 * 查询部门职权
	 * @param unitPowerCriteriaBean
	 * @return
	 */
	PageInfo<UnitPowerBean> getUnitPowersByID(UnitPowerCriteriaBean unitPowerCriteriaBean);


	/**
	 * 查询部门监管
	 * @param unitPowerCriteriaBean
	 * @return
	 */
	PageInfo<UnitSupervise> getUnitSuperviseByID(UnitPowerCriteriaBean unitPowerCriteriaBean);

	/**
	 * 查询部门检查事项
	 * @param unitPowerCriteriaBean
	 * @return
	 */
	PageInfo<UnitInspect> getUnitInspectByID(UnitPowerCriteriaBean unitPowerCriteriaBean);

	/**
	 * 查询部门许可事项
	 * @param unitPowerCriteriaBean
	 * @return
	 */
	PageInfo<UnitPermit> getUnitPermitByID(UnitPowerCriteriaBean unitPowerCriteriaBean);

	/**
	 * 查询部门职权、许可、检查事项、监管的数量
	 * @param unitId
	 * @return
	 */
    Map<String,Integer> getUnitStatData(Long unitId);

	/**
	 * 分页查询部门信息
	 * @param criteria
	 * @return
	 */
	PageInfo<UnitInfo> listUnitPage(UnitCriteriaBean criteria);

	/**
	 * 部门层级统计
	 * @return
     * @param isSupervise
	 */
    List<Map<String,Object>> getUnitLevelStat(Integer isSupervise, Long unitID);

	/**
	 * 部门性质统计
	 * @return
	 * @param isSupervise
	 */
	List<Map<String,Object>> getUnitNatureStat(Integer isSupervise, Long unitID);

    /**
     * 部门区域统计
     * @return
	 * @param isSupervise
     */
    List<Map<String,Object>> getUnitAreaStat(Integer isSupervise, Long unitID);

    /**
     * 执法主体统计
     * @return
     */
    List<Map<String,Object>> getLawSubjectStat(Long unitID);

    /**
     * 受委托机构统计
     * @return
     */
    List<Map<String,Object>> getEntrustUnitStat(Long unitID);

    /**
     * 受委托机构性质统计
     * @return
     */
    List<Map<String,Object>> getEntrustNatureStat(Long unitID);

	/**
	 * 监督机关级别统计
	 * @return
	 */
	List<Map<String,Object>>  getSupUnitLevelStat(Long unitID);

	/**
	 * 内设监督机构级别统计
	 * @return
	 */
	List<Map<String,Object>>  getInnerSupUnitLevelStat(Long unitID);

	Map<String, Object>  getUnitAreaStatForScreen(Integer isSupervise,Long regionid);

	/**
	 * 监督部门区域内部门数量
	 * @param unitID
	 * @param isSupervise
	 * @return
	 */
	Integer getUnitCount(Long unitID, Integer isSupervise);

    /**
     * 区域信息
     * @param value
     * @return
     */
    List<UnitInfo> loadArea(String value);

	/**
	 * 查询部门是否包含部门或人员
	 * @param unitID
	 * @param isSupervise
	 * @return 0
	 */
	Map<String,Object> checkContainChild(Long unitID, Integer isSupervise);
	
	/**
     * 机构层级调整
     * @param bean
     */
	public void adjust(HumanUnitAdjustBean bean);

	/**
	 * 部门信息核实标志位修改
	 * @param unitId
	 * @return
	 */
	Long confirm(long unitId);

    boolean setUnitDomainValues();

	boolean setUnitPowerValuesTem(MultipartFile file);

	boolean setUnitPowerValues();

	/**
	 * 获取所有省份
	 * @return
	 */
	List<Map<String, Object>> getUnitInfoForProvince(Long unitId);

	boolean setUnitInfoValues(MultipartFile file);

	/**
	 * 更新保存职权依据
	 * @param basisList
	 * @return
	 */
	public List<PowerBasis> saveUpdatePowerBasis (List<PowerBasis> basisList);

	/**
	 * 删除职权依据
	 * @param basisList
	 * @return
	 */
	public List<PowerBasis> deletePowerBasisById (List<PowerBasis> basisList);
	/**
	 * 获取所有区域职权法律法规code码 -大屏
	 * @param unitCode
	 * @return
	 */
    List<Map<String,Object>> getUnitPowerListForLawCode(String unitCode,Long regionid);

    boolean saveDicRegion(String regionJson);

	/**
	 * 获取地址信息
	 * @return
	 */
	List<SelectItem> loadAddress();

	boolean setUnitDomainValue();

	/**
	 * 添加职权
	 * @param unitPowerBean
	 * @return
	 */
	UnitPowerBean addPowerBasis(UnitPowerBean unitPowerBean);

	/**
	 * 删除职权
	 * @param powerId
	 * @return
	 */
	int deletePowerById(Integer powerId);

	/**
	 * 加载职权
	 * @param powerId
	 * @return
	 */
	UnitPowerBean loadPowerById(Integer powerId);

	boolean setSubjectIdValue();

	boolean setSubjectIdValues();

	/**
	 * 行政处罚默认地址
	 * @param id
	 * @return
	 */
	String loadAreaId(Long id);

	/**
	 * 0926页面改版 - 执法动态接口
	 * @return
	 */
	Map<String,Object> getLawDynamicsInfo();

	/**
	 * 部门信息
	 * @return
	 */
	Map<String,Object> getDepartmentInfo();

	/**
	 * 动态数据
	 * @return
	 */
	Pager getDynamicUnitInfo(DynamicUnitExcel dynamicUnitExcel);

    ResponseEntity<byte[]> exportExcel(HttpServletResponse response, DynamicUnitExcel dynamicUnitExcel);

	byte[] exportExcelForByte(DynamicUnitExcel dynamicUnitExcel,boolean unitFlag);

	PageInfo<HumanInfo> listHumanInfoPage(HumanInfoCriteriaBean humanInfoCriteriaBean);

	PageInfo<UnitInfo> listUnitInfoPage(UnitCriteriaBean criteria);
	/**
	 * 导入南宁市数据
	 *
	 */
	boolean importClosingTable(MultipartFile file);

	/**
	 * 根据登录人所在区域加载地址
	 * @return
	 */
	Map<String, Object> loadAddressByUser();
}
